package cn.mdmbct.douyin.data.api;

import cn.mdmbct.douyin.common.enums.DyOpenApi;
import cn.mdmbct.douyin.common.enums.RequestMethod;
import cn.mdmbct.douyin.common.body.DyOpenApiRequestBody;
import cn.mdmbct.douyin.common.body.VoidBody;
import cn.mdmbct.douyin.common.response.DyOpenApiResponse;
import cn.mdmbct.douyin.data.response.user.*;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 用户数据接口
 *
 * @author mdmbct  mdmbct@outlook.com
 * @date 2021/3/18 16:04
 * @modified mdmbct
 * @since 1.0
 */
@Getter
@RequiredArgsConstructor
public enum UserData implements DyOpenApi {


    /**
     * <a href="https://open.douyin.com/platform/doc/6848798450331486212">获取用户视频情况</a>
     * <p>
     * Scope: `data.external.user`需要申请权限需要用户授权<p>
     * 该接口用于获取用户视频情况。
     * <p>
     * 注：用户首次授权应用后，需要第二天才会产生全部的数据；
     */
    DATA_EXTERNAL_USER_ITEM(RequestMethod.GET,
            VoidBody.class,
            DataUserItemBaseRes.class,
            "/data/external/user/item?open_id=%s&date_type=%d&"

    ),


    /**
     * <a href="https://open.douyin.com/platform/doc/6848798450331453444">获取用户粉丝数</a>
     * <p>
     * Scope: `data.external.user`需要申请权限需要用户授权
     * <p>
     * 该接口用于获取用户粉丝数。
     * <p>
     * 注：用户首次授权应用后，需要第二天才会产生全部的数据；
     */
    DATA_EXTERNAL_USER_FANS(RequestMethod.GET,
            VoidBody.class,
            DataUserFansRes.class,
            "/data/external/user/fans?open_id=%s&date_type=%d&"
    ),

    /**
     * <a href="https://open.douyin.com/platform/doc/6848798450331518980">获取用户点赞数</a>
     * <p>
     * Scope: `data.external.user`需要申请权限需要用户授权
     * <p>
     * 该接口用于获取用户点赞数。
     * <p>
     * 注：用户首次授权应用后，需要第二天才会产生全部的数据；
     */
    DATA_EXTERNAL_USER_LIKE(RequestMethod.GET,
            VoidBody.class,
            DataUserLikeRes.class,
            "/data/external/user/like?open_id=%s&date_type=%d&"
    ),

    /**
     * <a href="https://open.douyin.com/platform/doc/6848798450331420676">获取用户评论数</a>
     * <p>
     * Scope: `data.external.user`需要申请权限需要用户授权
     * <p>
     * 该接口用于获取用户评论数。
     * <p>
     * 注：用户首次授权应用后，需要第二天才会产生全部的数据；
     */
    DATA_EXTERNAL_USER_COMMENT(RequestMethod.GET,
            VoidBody.class,
            DataUserCommentRes.class,
            "/data/external/user/comment?open_id=%s&date_type=%d&"
    ),

    /**
     * <a href="https://open.douyin.com/platform/doc/6848798471810451459">获取用户分享数</a>
     * <p>
     * Scope: `data.external.user`需要申请权限需要用户授权
     * <p>
     * 该接口用于获取用户分享数。
     * <p>
     * 注：用户首次授权应用后，需要第二天才会产生全部的数据；
     */
    DATA_EXTERNAL_USER_SHARE(RequestMethod.GET,
            VoidBody.class,
            DataUserShareRes.class,
            "/data/external/user/share?open_id=%s&date_type=%d&"
    ),

    /**
     * <a href="https://open.douyin.com/platform/doc/6848798450331551748">获取用户主页访问数</a>
     * <p>
     * Scope: `data.external.user`需要申请权限需要用户授权
     * <p>
     * 该接口用于获取用户主页访问数。
     * <p>
     * 注：用户首次授权应用后，需要第二天才会产生全部的数据；
     */
    DATA_EXTERNAL_USER_PROFILE(RequestMethod.GET,
            VoidBody.class,
            DataUserProfileRes.class,
            "/data/external/user/profile?open_id=%s&date_type=%d&"
    ),


    ;

    private final RequestMethod requestMethod;

    private final Class<? extends DyOpenApiRequestBody> requestBodyClass;

    private final Class<? extends DyOpenApiResponse> responseClass;

    private final String path;

}
